"""
时间序列数据处理功能演示示例

该示例展示了Table类的时间序列数据处理功能，包括日期解析、重采样和时间序列可视化。
"""
from ..dataframe import Table
import matplotlib.pyplot as plt
import numpy as np
from datetime import datetime, timedelta

# 时间序列处理演示
print("===== 时间序列数据处理功能演示 =====")

# 生成示例时间序列数据
dates = [datetime.now() - timedelta(days=i) for i in range(100)][::-1]
values = np.random.randn(100).cumsum() + 100  # 生成累积随机数据

data = {
    'date': dates,
    'value': values,
    'category': ['A' if i % 3 == 0 else 'B' for i in range(100)]
}

table = Table(data)
print("原始时间序列数据前5行:\n", table.head())

# 将日期列设置为索引
table.df.set_index('date', inplace=True)
print("\n设置日期为索引后的数据:\n", table.head())

# 按月重采样并计算均值
monthly_resampled = table.resample('M').mean()
print("\n按月重采样后的均值数据:\n", monthly_resampled)

# 计算滚动窗口平均值
table.add_column('rolling_mean', table.get_column('value').rolling(window=7).mean())
print("\n添加7天滚动平均后的数据前10行:\n", table.head(10))

# 绘制时间序列和滚动平均线
plt.figure(figsize=(12, 6))
plt.plot(table.df.index, table.get_column('value'), label='原始数据')
plt.plot(table.df.index, table.get_column('rolling_mean'), label='7天滚动平均', linestyle='--')
plt.title('时间序列数据与滚动平均线')
plt.xlabel('日期')
plt.ylabel('数值')
plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 按类别绘制时间序列
pivoted = table.pivot_table(values='value', index=table.df.index, columns='category')
pivoted.plot(figsize=(12, 6))
plt.title('不同类别的时间序列对比')
plt.xlabel('日期')
plt.ylabel('数值')
plt.legend(title='类别')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()